home *** CD-ROM | disk | FTP | other *** search
/ Belgian Amiga Club - ADF Collection / BS1 part 19.zip / BS1 part 19 / Laserdisk.adf / ABalls / balls (.txt) < prev    next >
AmigaBASIC Source Code  |  1987-05-06  |  12KB  |  545 lines

  1. ' Agressive Balls
  2. ' Juli 1987 MS-Soft
  3. ' Michael Schönborn
  4.  
  5.  
  6.  SCREEN 2,328,260,5,1
  7.  WINDOW 2,"AGRESSIVE BALLS   FANG   AGRESSIVE BALLS",,2,2
  8.  pi=3.14159
  9.  FOR f=0 TO 30
  10.    PALETTE f,0,0,5/16
  11.  NEXT
  12.  PALETTE 31,1,1,1
  13.  
  14.  DIM h0%(83),h1%(83),h2%(83),h3%(83)   'FIGUREN
  15.  DIM h4%(83),h5%(83),h6%(83),h7%(83),h8%(83)
  16.  DIM h9%(83),h10%(83),h11%(83),h12%(83)
  17.  COLOR 31,30:CLS
  18.  GOSUB defin 
  19.  welle
  20.  CLS
  21.  RESTORE farben
  22.  FOR f=0 TO 31
  23.    READ r,g,b:PALETTE f,r/16,g/16,b/16
  24.  NEXT
  25.  
  26. farben:
  27.  DATA 0,0,12,0,0,5,0,0,5,0,0,5
  28.  DATA 1,2,12,3,3,13,4,4,14,6,6,15
  29.  DATA 0,0,5,0,0,0,0,0,0
  30.  DATA 0,0,5,0,0,12,1,2,12,3,3,13,4,4,14,6,6,15
  31.  DATA 7,0,15,11,3,14,13,7,14,10,0,0,11,2,2
  32.  DATA 12,3,3,14,5,5,15,8,8,0,8,0
  33.  DATA 1,10,1,2,11,2,4,13,4,6,15,6
  34.  DATA 0,0,5,8,9,0
  35.  
  36.  MENU 1,0,1,"Balls"
  37.  MENU 1,2,1,"MS-SOFT"
  38.  MENU 1,3,1,"c 1987
  39.  MENU 2,0,1,"Musik"
  40.  MENU 2,2,1,"Musik an"
  41.  MENU 2,3,1,"Musik aus"
  42.  ON MENU GOSUB menue
  43.  MENU ON
  44.  
  45.  bild
  46.  hi$="MS":hsc=100:f1=9
  47. start: 
  48.  leb=5:s=0:sc=0
  49.  
  50. beginn:
  51.  xs=16:ys=160
  52.  xa1=288:ya1=16:yya1=ya1:xxa1=xa1
  53.  xa2=288:ya2=224:xxa2=xa2:yya2=ya2
  54.  GOSUB zeichnen
  55.  COLOR 16,0
  56.  LOCATE 1,1:PRINT "PUNKTE:       LEBEN:   ";hi$;":      "
  57.  leben (leb):score (sc):high(hsc)
  58.  pu=0:start=13
  59.  RESTORE musik
  60.  ON TIMER(4) GOSUB musik
  61.  TIMER ON
  62.  GET (xa1,ya1)-(xa1+15,ya1+15),h9%
  63.  GET (xa2,ya2)-(xa2+15,ya2+15),h10%
  64.  spielerfig
  65.  GOSUB angreifer1
  66.  GOSUB angreifer2
  67. loop1: 
  68.  GOSUB angreiferbew
  69.  GOSUB angreiferbew2
  70.  GOSUB spieler 
  71.  IF pu=max THEN schluss
  72.  GOTO loop1 
  73.  
  74. angreiferbew:
  75.  xsa=(xa1-xs):ysa=(ya1-ys) 
  76.  IF ABS(xsa)<=16 AND ABS(ysa)<=16 THEN GOTO zusammenstoss
  77.  IF ysa=0 THEN GOTO an1
  78.  y=ya1-2*SGN(ysa)
  79.  p1=POINT (xa1,y-15*(SGN(ysa)<0))
  80.  p2=POINT (xa1+15,y-15*(SGN(ysa)<0))
  81.  IF p1<f1 AND p2<f1 THEN sprung1=0:ya1=y:GOTO angreifer1   
  82. an1: IF sprung1=1 THEN GOTO loop2
  83.  x=xa1-2*SGN(xsa)
  84.  p1=POINT (x-15*(SGN(xsa)<0),ya1)
  85.  p2=POINT (x-15*(SGN(xsa)<0),ya1+15)
  86.  IF p1<f1 AND p2<f1 THEN xa1=x:GOTO angreifer1
  87.  
  88. loop2: 
  89.  x=xa1+2*SGN(xsa)
  90.  p1=POINT (x-15*(SGN(xsa)>0),ya1)
  91.  p2=POINT (x-15*(SGN(xsa)>0),ya1+15)
  92.  IF p1<f1 AND p2<f1 THEN xa1=x:sprung1=1:GOTO angreifer1
  93.  sprung1=0:xxa1=xa1:yya1=ya1
  94.  RETURN
  95.                                                         
  96. angreiferbew2:
  97.  xsa=(xa2-xs):ysa=(ya2-ys) 
  98.  IF ABS(xsa)<=16 AND ABS(ysa)<=16 THEN GOTO zusammenstoss
  99.  IF xsa=0 THEN GOTO an2
  100.  x=xa2-2*SGN(xsa)
  101.  p1=POINT (x-15*(SGN(xsa)<0),ya2)
  102.  p2=POINT (x-15*(SGN(xsa)<0),ya2+15)
  103.  IF p1<f1 AND p2<f1 THEN xa2=x:sprung2=0:GOTO angreifer2
  104. an2: IF sprung2=1 THEN GOTO loop3
  105.  y=ya2-2*SGN(ysa)
  106.  p1=POINT (xa2,y-15*(SGN(ysa)<0))
  107.  p2=POINT (xa2+15,y-15*(SGN(ysa)<0))
  108.  IF p1<f1 AND p2<f1 THEN ya2=y:GOTO angreifer2   
  109.  
  110. loop3: 
  111.  y=ya2+2*SGN(ysa)
  112.  p1=POINT (xa2,y-15*(SGN(ysa)>0))
  113.  p2=POINT (xa2+15,y-15*(SGN(ysa)>0))
  114.  IF p1<f1 AND p2<f1 THEN ya2=y:sprung2=1:GOTO angreifer2 
  115.  sprung2=0:xxa2=xa2:yya2=ya2
  116.  RETURN
  117.  
  118.  
  119. spieler:
  120.  ix=STICK(2):iy=STICK(3)
  121.  IF iy=-1 AND POINT(xs,ys-2)<f1 THEN
  122.         IF POINT(xs+15,ys-2)<f1 THEN
  123.         ys=ys-2:GOTO loop4
  124.         END IF
  125.  END IF
  126.  IF iy=1 AND POINT(xs,ys+17)<f1 THEN 
  127.        IF POINT(xs+15,ys+17)<f1 THEN
  128.        ys=ys+2:GOTO loop4
  129.        END IF
  130.  END IF
  131.  IF ix=-1 AND POINT(xs-2,ys)<f1 THEN
  132.         IF POINT(xs-2,ys+15)<f1 THEN
  133.         xs=xs-2:GOTO loop4
  134.         END IF
  135.  END IF
  136.  IF ix=1 AND POINT(xs+17,ys)<f1 THEN
  137.        IF POINT(xs+17,ys+15)<f1 THEN
  138.        xs=xs+2:GOTO loop4
  139.        END IF
  140.  END IF
  141. loop4:
  142.  IF ix=1 OR iy=1 THEN x=15:y=15 :ELSE x=0:y=0
  143.  FOR xx=0 TO 15 STEP 4
  144.    xp=xs+x*ABS(ix)+xx*ABS(iy)
  145.    yp=ys+y*ABS(iy)+xx*ABS(ix)
  146.    IF POINT (xp,yp)<8 THEN GOTO punkt
  147.  NEXT
  148. loop7: 
  149.  spielerfig   
  150.  RETURN
  151.  
  152. punkt: pu=pu+1
  153.  sc=sc+s+1:score (sc)
  154.  SOUND 1760,2,255,1
  155.  x=INT(xp/16)*16
  156.  y=INT(yp/16)*16
  157.  PUT (x,y),h12%,PSET
  158.  GOTO loop7
  159.       
  160. SUB spielerfig STATIC
  161.  SHARED h8%(),xs,ys 
  162.  PUT(xs,ys),h8%,PSET
  163. END SUB
  164.  
  165. angreifer1: 
  166.  PUT (xxa1,yya1),h9%,PSET
  167.  GET (xa1,ya1)-(xa1+15,ya1+15),h9%
  168.  PUT (xa1,ya1),h6%,PSET
  169.  xxa1=xa1:yya1=ya1
  170.  RETURN
  171.  
  172. angreifer2: 
  173.  PUT (xxa2,yya2),h10%,PSET
  174.  GET (xa2,ya2)-(xa2+15,ya2+15),h10%
  175.  PUT (xa2,ya2),h7%,PSET
  176.  xxa2=xa2:yya2=ya2             
  177.  RETURN
  178.             
  179. schluss: sc=sc+s*1000+1000+1000*leb:
  180.  score(sc)
  181.  s=s+1:IF s=smax+1 THEN s=0
  182.  leb=5:leben (leb)
  183.  GOTO beginn
  184.  
  185. SUB leben (leb) STATIC
  186.  LOCATE 1,21:PRINT leb
  187. END SUB 
  188.  
  189. SUB score (sc) STATIC
  190.  IF sc<1000000 THEN
  191.   LOCATE 1,8:PRINT USING"######";sc
  192.  END IF 
  193. END SUB
  194.  
  195. SUB high (hsc) STATIC
  196.  SHARED hi$
  197.  LOCATE 1,24:PRINT hi$
  198.  LOCATE 1,27:PRINT USING"######";hsc
  199. END SUB 
  200.  
  201. zusammenstoss: 
  202.  SOUND 880,18,255,1
  203.  leb=leb-1:leben(leb)
  204.  IF leb=0 THEN GOTO ende
  205.  PUT (xxa2,yya2),h10%,PSET
  206.  PUT (xxa1,yya1),h9%,PSET
  207.  xa1=288:ya1=16:yya1=ya1:xxa1=xa1
  208.  xa2=288:ya2=224:xxa2=xa2:yya2=ya2
  209.  GET (xa2,ya2)-(xa2+15,ya2+15),h10%
  210.  PUT (xa2,ya2),h7%,PSET
  211.  GET (xa1,ya1)-(xa1+15,ya1+15),h9%
  212.  PUT (xa1,ya1),h6%,PSET
  213.  GOTO loop1
  214.  
  215. ende: 
  216.  TIMER OFF 
  217.  COLOR 31
  218.  LOCATE 13,13:PRINT "GAME OVER"
  219.  FOR i=4000 TO 100 STEP -50
  220.  SOUND i,1,255,3
  221.  NEXT
  222.  CLS
  223.  IF sc>hsc THEN
  224.    hsc=sc
  225.    LOCATE 4,3:
  226.    PRINT "Sie haben den Highscore":PRINT "  verbessert!"
  227.    LOCATE 6,3:INPUT "Wie lauten Ihre Initialen";hi$
  228.    hi$=UCASE$(LEFT$(hi$,2))
  229.    LOCATE 9,3
  230.    PRINT "Neuer Highscore (";USING"######";hsc;
  231.    PRINT ")"
  232.    LOCATE 11,11:PRINT "von ";hi$;" !"
  233.  END IF
  234.  LOCATE 14,1:PRINT "Wollen Sie es noch einmal"
  235.  PRINT "versuchen";
  236.  INPUT"(j/n)";j$:j$=UCASE$(j$)
  237.  IF j$="J" THEN GOTO start
  238.  LOCATE 17,12:PRINT "ENDE"
  239.  END
  240.    
  241.    
  242.    
  243. defin:
  244.  LOCATE 12,11:PRINT "Bitte warten!"
  245.  RESTORE rohr 'Rohr horizontal, vertikal, Ecken 
  246.  x=0
  247.  FOR f=12 TO 16
  248.    READ i
  249.    FOR j=1 TO i
  250.      LINE (x,0)-(x,15),f
  251.      LINE (15-x,0)-(15-x,15),f
  252.      x=x+1
  253.    NEXT
  254.  NEXT
  255.  GET (0,0)-(15,15),h0%
  256.  RESTORE rohr
  257.  x=0
  258.  FOR f=12 TO 16
  259.    READ i
  260.    FOR j=1 TO i
  261.      LINE (0,x)-(15,x),f
  262.      LINE (0,15-x)-(15,15-x),f
  263.      x=x+1
  264.    NEXT
  265.  NEXT
  266.  GET (0,0)-(15,15),h1%
  267.  RESTORE rohr
  268.  x=0
  269.  FOR f=12 TO 16
  270.    READ i
  271.    LINE (x,x)-(15,15),f,bf
  272.    x=x+i
  273.  NEXT  
  274.  RESTORE rohr2
  275.  FOR f=16 TO 12 STEP -1
  276.    READ i
  277.    LINE (x,x)-(15,15),f,bf
  278.    x=x+i
  279.  NEXT  
  280.  GET (0,0)-(15,15),h2%
  281.  RESTORE rohr
  282.  x=0
  283.  FOR f=12 TO 16
  284.    READ i
  285.    LINE (15,0)-(x,15-x),f,bf
  286.    x=x+i
  287.  NEXT  
  288.  RESTORE rohr2
  289.  FOR f=16 TO 12 STEP -1
  290.    READ i
  291.    LINE (15,0)-(x,15-x),f,bf
  292.    x=x+i
  293.  NEXT  
  294.  GET (0,0)-(15,15),h3%
  295.  RESTORE rohr
  296.  x=0
  297.  FOR f=12 TO 16
  298.    READ i
  299.    LINE (0,15)-(15-x,x),f,bf
  300.    x=x+i
  301.  NEXT  
  302.  RESTORE rohr2
  303.  FOR f=16 TO 12 STEP -1
  304.    READ i
  305.    LINE (0,15)-(15-x,x),f,bf
  306.    x=x+i
  307.  NEXT  
  308.  GET (0,0)-(15,15),h4%
  309.  RESTORE rohr
  310.  x=0
  311.  FOR f=12 TO 16
  312.    READ i
  313.    LINE (0,0)-(15-x,15-x),f,bf
  314.    x=x+i
  315.  NEXT  
  316.  RESTORE rohr2
  317.  FOR f=16 TO 12 STEP -1
  318.    READ i
  319.    LINE (0,0)-(15-x,15-x),f,bf
  320.    x=x+i
  321.  NEXT  
  322.  GET (0,0)-(15,15),h5%
  323. rohr: DATA 2,2,2,1,1 
  324. rohr2: DATA 1,1,2,2,2 
  325.  
  326.  LINE (0,0)-(15,15),8,bf
  327.  FOR i=1 TO 4
  328.    CIRCLE (8,8),5-i,3+i,,,1
  329.    PAINT (8,8),3+i
  330.  NEXT
  331.  GET (0,0)-(15,15),h11%
  332.  
  333. 'Angreifer 1 und 2
  334.  LINE (0,0)-(15,15),30,bf
  335.  FOR k=0 TO 1
  336.    RESTORE kugeln
  337.    FOR i=0 TO 4
  338.      READ x
  339.      CIRCLE (8,8),x,20+i+k*5,,,1
  340.      PAINT (8,8),20+i+k*5 
  341.    NEXT
  342.    IF k=0 THEN GET (0,0)-(15,15),h6%
  343.    IF k=1 THEN GET (0,0)-(15,15),h7%
  344.  NEXT 
  345. kugeln: DATA 7,6,4,2,1
  346.  
  347. 'Punkte
  348.  LINE (0,0)-(15,15),8,bf
  349.  GET (0,0)-(15,15),h12%
  350.  
  351. 'spieler
  352.  RESTORE spielfig
  353.  FOR i=2 TO 7 
  354.    FOR j=0 TO 5
  355.      READ x
  356.      IF x=0 THEN x=30 :ELSE x=x+16
  357.      PSET (8+j,i),x:PSET (7-j,i),x
  358.      PSET (8+j,15-i),x:PSET (7-j,15-i),x
  359.    NEXT
  360.  NEXT
  361.  GET (0,0)-(15,15),h8%
  362. spielfig: 
  363.  DATA 1,0,0,0,0,0,2,1,0,0,0,0
  364.  DATA 3,2,1,0,0,0,3,2,1,1,0,0
  365.  DATA 3,3,2,2,1,1,1,3,3,3,2,2
  366.  
  367. 'Spielfelder 0-3 werden definiert 
  368. 'erweiterbar durch Ändern von smax
  369. '0-vert, 1-hor, 2-li ob, 3-li un
  370. '4-re ob, 5-re un, 6-Punkt
  371. 'In den Zeilen 0 und 13 jedes
  372. 'Schirmes muss als letzte Zahl eine
  373. '6 stehen, ebenso als 1. Zahl in  
  374. 'Zeile 9! Dort stehen Angreifer, bzw.
  375. 'Spielerfigur. Es sind auch Wege
  376. 'von diesen Positionen offenzuhalten!
  377. 'Schirmgröße: 18*14
  378.  
  379.  smax=3
  380.  DIM s$(smax,13)
  381.   s$(0,0)="606666666666666666"
  382.   s$(0,1)="606211161111161146"
  383.   s$(0,2)="606066666666666606"
  384.   s$(0,3)="606066611114660606"
  385.   s$(0,4)="606314666660615666"
  386.   s$(0,5)="606660621460666661"
  387.   s$(0,6)="606060606066661466"
  388.   s$(0,7)="606060666662166346"
  389.   s$(0,8)="631115611160606606"
  390.   s$(0,9)="666666666660631606"
  391.  s$(0,10)="621111111660666606"
  392.  s$(0,11)="606666666660660606"
  393.  s$(0,12)="606111111166615606"
  394.  s$(0,13)="606666666660666666"
  395.  
  396.   s$(1,0)="666666666666066666"    
  397.   s$(1,1)="666066666666066211"
  398.   s$(1,2)="606066611466066066"
  399.   s$(1,3)="156066666311566066"
  400.   s$(1,4)="666311466666666666"
  401.   s$(1,5)="166666066666146111"
  402.   s$(1,6)="666666066666606666"
  403.   s$(1,7)="111146066666606066"
  404.   s$(1,8)="666606311111156066"
  405.   s$(1,9)="666606666666666311"
  406.  s$(1,10)="606606661114666666"
  407.  s$(1,11)="631156066660621146"
  408.  s$(1,12)="666666066660606606"
  409.  s$(1,13)="611111566115666606"
  410.  
  411.   s$(2,0)="666666666666666666" 
  412.   s$(2,1)="621111116611111146"
  413.   s$(2,2)="606666666666666606"
  414.   s$(2,3)="606211116611114606"
  415.   s$(2,4)="606066666666660606"
  416.   s$(2,5)="606062116611160606"
  417.   s$(2,6)="606660666666660666"
  418.   s$(2,7)="666066666666066606"
  419.   s$(2,8)="606061116611560606"
  420.   s$(2,9)="606066666666660606"
  421.  s$(2,10)="606311116611115606"
  422.  s$(2,11)="606666666666666606"
  423.  s$(2,12)="631111116611111156"
  424.  s$(2,13)="666666666666666666"
  425.  
  426.   s$(3,0)="666666666666666666" 
  427.   s$(3,1)="614611166211161616"
  428.   s$(3,2)="660666666066666066"
  429.   s$(3,3)="615606666666666666"
  430.   s$(3,4)="666666611116111166"
  431.   s$(3,5)="661111666666666666"
  432.   s$(3,6)="166666621146111166"
  433.   s$(3,7)="661111631156666661"
  434.   s$(3,8)="666666666666111166"
  435.   s$(3,9)="661111611116666666"
  436.  s$(3,10)="666666666666606216"
  437.  s$(3,11)="660666660666666066"
  438.  s$(3,12)="616161115661116316"
  439.  s$(3,13)="666666666666666666"
  440.  
  441.  RETURN
  442.  
  443. zeichnen: COLOR ,11:CLS
  444.  PUT (0,0),h2%,PSET
  445.  FOR x=16 TO 288 STEP 16
  446.    PUT (x,0),h1%,PSET
  447.  NEXT
  448.  max=-1
  449.  PUT (304,0),h4%,PSET
  450.  FOR y=1 TO 14
  451.  PUT (0,y*16),h0%,PSET
  452.  FOR x=1 TO 18
  453.  z=VAL(MID$(s$(s,y-1),x,1))
  454.  IF z=6 THEN PUT (x*16,y*16),h11%,PSET:max=max+1 :ELSE
  455.    IF z=0 THEN PUT (x*16,y*16),h0%,PSET :ELSE
  456.    IF z=1 THEN PUT (x*16,y*16),h1%,PSET :ELSE
  457.    IF z=2 THEN PUT (x*16,y*16),h2%,PSET :ELSE
  458.    IF z=3 THEN PUT (x*16,y*16),h3%,PSET :ELSE
  459.    IF z=4 THEN PUT (x*16,y*16),h4%,PSET :ELSE
  460.    IF z=5 THEN PUT (x*16,y*16),h5%,PSET
  461.  NEXT x
  462.  PUT (304,y*16),h0%,PSET
  463.  NEXT y
  464.  PUT (0,240),h3%,PSET
  465.  FOR x=16 TO 288 STEP 16
  466.    PUT (x,240),h1%,PSET
  467.  NEXT
  468.  PUT (304,240),h5%,PSET
  469.  RETURN
  470.  
  471. SUB welle STATIC
  472.  SHARED pi
  473.  DIM form%(255)
  474.  pi2=2*pi/255
  475.  FOR i=0 TO 255
  476.   form%(i)=SIN(pi2*i)+SIN(6*pi2*i)+SIN(0.33*pi2*i)
  477.   form%(i)=((form%(i)+SIN(3*pi2*i))/4)*127
  478.  NEXT
  479.  WAVE 0,form%
  480.  ERASE form%
  481. END SUB
  482.  
  483. musik: IF music=0 THEN RETURN
  484.  start=start+12
  485.  IF start>13 THEN start=1:RESTORE musik  
  486.  SOUND WAIT
  487.  FOR ton=start TO start+11
  488.   READ f
  489.   IF f>1000 THEN f=f-1000:l=10.6 :ELSE l=4.55
  490.   SOUND f,l,255,0
  491.  NEXT
  492.  SOUND RESUME
  493.  RETURN
  494.  DATA 1130.8,146.8,164.8,174.6,196
  495.  DATA 164.8,1196,220,174.6,1220,196
  496.  DATA 164.8,1196,130.8,146.8,164.8,174.6,196
  497.  DATA 164.8,1196,174.6,164.8,146.8,1130.8
  498.  
  499. menue: m=MENU(0):mm=MENU(1)
  500.  IF m=2 AND mm=3 THEN music=0 
  501.  IF m=2 AND mm=2 THEN music=1
  502.  RETURN 
  503.  
  504.  
  505. SUB bild STATIC
  506.  SHARED h6%(),h7%(),h8%(),h11%()
  507.  CLS
  508.  DIM a$(4)
  509.  a$(0)="1110222010002000222"
  510.  a$(1)="1010202010002000200"
  511.  a$(2)="1110222010002000222"
  512.  a$(3)="1010202010002000002"
  513.  a$(4)="1110202011102220222"
  514.  FOR y=0 TO 4
  515.    FOR x=1 TO 19
  516.     i=VAL(MID$(a$(y),x,1))
  517.     IF i=0 THEN GOTO loop9
  518.     IF i=1 THEN PUT ((x-1)*16,y*16),h6%,PSET
  519.     IF i=2 THEN PUT ((x-1)*16,y*16),h7%,PSET
  520. loop9: 
  521.    NEXT
  522.  NEXT 
  523.  FOR x=0 TO 32
  524.    SCROLL (0,0)-(320,112),0,1
  525.  NEXT
  526.  FOR y=1 TO 3
  527.    FOR x=12 TO 16 STEP 0.5
  528.      COLOR INT(x)
  529.      LOCATE 2,12:PRINT "AGRESSIVE"
  530.    NEXT
  531.  NEXT
  532.  COLOR 21:LOCATE 15,9:PRINT "by M. Schönborn"
  533.  PUT (16,144),h8%,PSET
  534.  PUT (16,176),h11%,PSET
  535.  COLOR 26:LOCATE 17,6:PRINT "Spielfigur"
  536.  LOCATE 21,6:PRINT "Pillen zum Fressen"
  537.  COLOR 31:LOCATE 23,1:PRINT "Joystick in Port 2!"
  538.  LOCATE 26,8:PRINT "Start mit > S <!"
  539.  j$=""
  540.  WHILE j$<>"S"
  541.    SOUND RND*100+100,1,255,3
  542.    j$=UCASE$(INKEY$)
  543.  WEND    
  544. END SUB
  545.